反射から計画へ
エージェント設計の進化において、まず 反射エージェント(知覚を単純なルールに基づいて直接行動にマッピングする方式。例:「前方の車がブレーキを踏んだら、ブレーキを開始する」)から 問題解決エージェントへと移行します。反射エージェントは即時の状況に基づいて動作しますが、問題解決エージェントは 目標ベースです。彼らは行動の将来の結果を考慮し、特定の目的を満たす行動の系列を見つけ出します。
- 反射エージェント: $Action = Function(Percept)$
- 計画エージェント: $Action\_Sequence = Search(State, Goal)$
原子的状態表現
この基本的なレベルでは、エージェントは 原子的表現を利用します。これは、世界の状態がブラックボックスとして扱われることを意味します。つまり、探索アルゴリズムから内部構造が見えない単一のノードとして扱われます。エージェントは以下のことだけを推論します:
- 状態($S$): 環境のスナップショット。
- 行動($A$): 状態間の遷移。
- 目標判定: 状態 $s \in S_{goal}$ かどうかのブールチェック。
問題解決ループ
問題解決エージェントは、環境をナビゲートするために、明確な4段階のサイクルに従います:
- 目標の定式化: 現在の状況に基づいて追求すべき目標を決定する。
- 問題の定式化: 現実世界を数学的モデル(状態と行動)に抽象化する。
- 探索: 行動の系列をシミュレーションして 最適経路を見つける。
- 実行: さらなる熟考なしに探索フェーズで見つかった行動を実行する(静的環境を想定)。
Python実装(agent_types.py)
1
class ReflexAgent:
2
defact(self, percept):
3
# Direct mapping: Rule -> Action
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__(self):
8
self.seq = [] # Buffered action sequence
9
10
defact(self, percept):
11
# If we are mid-execution, continue
12
ifself.seq:
13
returnself.seq.pop(0)
14
15
# Otherwise, Plan (Search)
16
state = self.update_state(percept)
17
goal = self.formulate_goal(state)
18
problem = self.formulate_problem(state, goal)
19
20
# Search returns a list of actions
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop(0)